#pragma GCC optimize(2, "Ofast", "inline")
#include <iostream>
#include <vector>
#include <map>
#include <cmath>
#include <set>
#include <queue>
#include <stack>
#include <list>
#include <unordered_map>
#include <algorithm>
#define endl '\n'
#define int long long
#define pii pair<int, int>
using namespace std;

// 已知

int n, x;
vector<int> a;
// 未知
int down = 0, up = 0, len = 0;
int ans = 0;
signed main()
{
    cin >> n;
    for (int i = 0;i < n;i++)
    {
        cin >> x;
        a.push_back(x);
    }
    for (int i = 1;i < n;++i) 
    {
        if (a[i] > a[i - 1]) // 当前是上升段
        {
            len += down;  // 有几个下降段，就能构成几个波浪
            down = 0; // 下降段升段重置
            up++; // 上升段长度增加
        }
        else // 当前是下降段
        {
            len = 0;  // 长度重置，开始找新的波浪
            down += up; // 下降段长度增加，有几个没用过的上升段就可以和这个下降段组成几个波浪
            up = 0; // 上升段重置
        }
        ans += len;
    }
    cout << ans;
    return 0;
}